|
Программируем по-русски
|
Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку. Издатель Глагола
|
(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) (**) ОТДЕЛ Окно+; (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) (* НАЗНАЧЕНИЕ: вывод фразы "Открытое окно" через графическую оконную систему *) (*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*) ИСПОЛЬЗУЕТ ОБХОД; (* Win API *) ВИД ATOM = ОБХОД.Цел16; WINBOOL = ЦЕЛ; LONG = ЦЕЛ; DWORD = ЦЕЛ; LONG_PTR= ЦЕЛ; LPARAM = LONG_PTR; WPARAM = LONG_PTR; LRESULT = LONG_PTR; UINT = ЦЕЛ; HANDLE = ЦЕЛ; HMODULE = HANDLE; HGDIOBJ = HANDLE; HINST = HANDLE; HWND = HANDLE; HDC = HANDLE; HMENU = HANDLE; HICON = HANDLE; HCURSOR = HANDLE; HBRUSH = HANDLE; LPCTSTR = ЦЕЛ; LPVOID = ЦЕЛ; LPBYTE = ЦЕЛ; LPCSTR = ЦЕЛ; LPTSTR = ЦЕЛ; WNDPROC = ЗАДАЧА* (_para1:HWND; _para2:UINT; _para3:WPARAM; _para4:LPARAM):LRESULT; STARTUPINFO = НАБОР cb :DWORD; lpReserved :LPTSTR; lpDesktop :LPTSTR; lpTitle :LPTSTR; dwX :DWORD; dwY :DWORD; dwXSize :DWORD; dwYSize :DWORD; dwXCountChars:DWORD; dwYCountChars:DWORD; dwFillAttribute:DWORD; dwFlags :DWORD; wShowWindow :ОБХОД.Цел16; cbReserved2 :ОБХОД.Цел16; lpReserved2 :LPBYTE; hStdInput :HANDLE; hStdOutput :HANDLE; hStdError :HANDLE; КОН; POINT = НАБОР x:LONG; y:LONG; КОН; RECT = НАБОР Left,Top,Right,Bottom:ЦЕЛ; КОН; MSG = НАБОР hwnd :HWND; message:UINT; wParam :WPARAM; lParam :LPARAM; time :DWORD; pt :POINT; КОН; PAINTSTRUCT = НАБОР hdc :HDC; fErase :WINBOOL; rcPaint :RECT; fRestore :WINBOOL; fIncUpdate :WINBOOL; rgbReserved:РЯД 32 ИЗ УЗКЦЕЛ; КОН; WNDCLASS = НАБОР style :UINT; lpfnWndProc :WNDPROC; cbClsExtra :ЦЕЛ; cbWndExtra :ЦЕЛ; hInstance :HANDLE; hIcon :HICON; hCursor :HCURSOR; hbrBackground:HBRUSH; lpszMenuName :LPCTSTR; lpszClassName:LPCTSTR; КОН; ПОСТ WM_PAINT = 15; WM_DESTROY = 2; DT_CENTER = 1; DT_SINGLELINE = 32; DT_VCENTER = 4; CS_VREDRAW = 1; CS_HREDRAW = 2; IDC_ARROW = 32512; IDI_APPLICATION = 32512; WHITE_BRUSH = 0; WS_OVERLAPPEDWINDOW = 0CF0000H; CW_USEDEFAULT = МИН(ЦЕЛ); SW_SHOW = 5; MB_OK = 0; (* начало приложения *) ПОСТ имяПриложения="Глагол-приложение"; ПЕР CmdShow:ЦЕЛ; hInstance:HANDLE; |
ЗАДАЧА GetModuleHandle(lpModuleName:LPCSTR):HMODULE; ВЫЗОВ "GetModuleHandleW" ИЗ "kernel32.dll"; ЗАДАЧА GetStartupInfo(lpStartupInfo+:STARTUPINFO); ВЫЗОВ "GetStartupInfoW" ИЗ "kernel32.dll"; ЗАДАЧА GetStockObject(_para1:ЦЕЛ):HGDIOBJ; ВЫЗОВ "GetStockObject" ИЗ "gdi32.dll"; ЗАДАЧА BeginPaint(hWnd:HWND; lpPaint+:PAINTSTRUCT):HDC; ВЫЗОВ "BeginPaint" ИЗ "user32.dll"; ЗАДАЧА GetClientRect(hWnd:HWND; lpRect+:RECT); ВЫЗОВ "GetClientRect" ИЗ "user32.dll"; ЗАДАЧА EndPaint(hWnd:HWND; lpPaint+:PAINTSTRUCT); ВЫЗОВ "EndPaint" ИЗ "user32.dll"; ЗАДАЧА PostQuitMessage(nExitCode:ЦЕЛ); ВЫЗОВ "PostQuitMessage" ИЗ "user32.dll"; ЗАДАЧА LoadIcon(hInstance:HINST; lpIconName:ЦЕЛ):HICON; ВЫЗОВ "LoadIconW" ИЗ "user32.dll"; ЗАДАЧА LoadCursor(hInstance:HINST; lpCursorName:ЦЕЛ):HCURSOR; ВЫЗОВ "LoadCursorW" ИЗ "user32.dll"; ЗАДАЧА RegisterClass(lpWndClass+:WNDCLASS):КЛЮЧ; ВЫЗОВ "RegisterClassW" ИЗ "user32.dll"; ЗАДАЧА ShowWindow(hWnd:HWND; nCmdShow:ЦЕЛ); ВЫЗОВ "ShowWindow" ИЗ "user32.dll"; ЗАДАЧА UpdateWindow(hWnd:HWND); ВЫЗОВ "UpdateWindow" ИЗ "user32.dll"; ЗАДАЧА TranslateMessage(lpMsg+:MSG); ВЫЗОВ "TranslateMessage" ИЗ "user32.dll"; ЗАДАЧА DispatchMessage(lpMsg+:MSG); ВЫЗОВ "DispatchMessageW" ИЗ "user32.dll"; ЗАДАЧА CreateWindowEx( dwExStyle:DWORD; lpClassName-:ЦЕПЬ; lpWindowName-:ЦЕПЬ; dwStyle:DWORD; X,Y,nWidth,nHeight:ЦЕЛ; hWndParent:HWND; hMenu:HMENU; hInstance:HINST; lpParam:LPVOID):HWND; ВЫЗОВ "CreateWindowExW" ИЗ "user32.dll"; ЗАДАЧА MessageBox( hWnd:HWND; lpText-:ЦЕПЬ; lpCaption-:ЦЕПЬ; uType:UINT); ВЫЗОВ "MessageBoxW" ИЗ "user32.dll"; ЗАДАЧА GetMessage( lpMsg+:MSG; hWnd:HWND; wMsgFilterMin:UINT; wMsgFilterMax:UINT):КЛЮЧ; ВЫЗОВ "GetMessageW" ИЗ "user32.dll"; ЗАДАЧА DefWindowProc( hWnd:HWND; Msg:UINT; wParam:WPARAM; lParam:LPARAM):LRESULT; ВЫЗОВ "DefWindowProcW" ИЗ "user32.dll"; ЗАДАЧА DrawText( hDC:HDC; lpString-:ЦЕПЬ; nCount:ЦЕЛ; lpRect+:RECT; uFormat:UINT); ВЫЗОВ "DrawTextW" ИЗ "user32.dll"; |
(*────────────────────────────────────────────────────────────────────────────*) ЗАДАЧА* ОконнаяЗадача(hwnd:HWND; message:UINT; wParam:WPARAM; lParam:LPARAM):LRESULT; (* Вызывается из ОС *) ПЕР hdc:HDC; paintStruct:PAINTSTRUCT; rect:RECT; УКАЗ ВЫБРАТЬ message ИЗ | WM_PAINT: hdc:=BeginPaint(hwnd,paintStruct); GetClientRect(hwnd,rect); DrawText(hdc,"Открытое окно",-1,rect,DT_SINGLELINE+DT_CENTER+DT_VCENTER); EndPaint(hwnd,paintStruct) | WM_DESTROY: PostQuitMessage(0) ИНАЧЕ ВОЗВРАТ DefWindowProc(hwnd,message,wParam,lParam) КОН; ВОЗВРАТ 0 КОН ОконнаяЗадача; (*────────────────────────────────────────────────────────────────────────────*) ЗАДАЧА ПрописатьОкно():КЛЮЧ; (* Прописывает окно в ОС *) ПЕР wndClass:WNDCLASS; УКАЗ wndClass.style:=CS_HREDRAW+CS_VREDRAW; wndClass.lpfnWndProc:=ОконнаяЗадача; wndClass.cbClsExtra:=0; wndClass.cbWndExtra:=0; wndClass.hInstance:=hInstance; wndClass.hIcon:=LoadIcon(0,IDI_APPLICATION); wndClass.hCursor:=LoadCursor(0,IDC_ARROW); wndClass.hbrBackground:=GetStockObject(WHITE_BRUSH); wndClass.lpszMenuName:=0; wndClass.lpszClassName:=ОБХОД.ПолучитьАдрес(имяПриложения); ВОЗВРАТ RegisterClass(wndClass) КОН ПрописатьОкно; (*────────────────────────────────────────────────────────────────────────────*) ЗАДАЧА СоздатьОкно():HWND; (* Создаёт оконный класс *) ПЕР hwnd:HWND; УКАЗ hwnd:=CreateWindowEx(0,имяПриложения,имяПриложения,WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,0,0,hInstance,0); ЕСЛИ hwnd # 0 ТО ShowWindow(hwnd,CmdShow); UpdateWindow(hwnd) КОН; ВОЗВРАТ hwnd КОН СоздатьОкно; (*────────────────────────────────────────────────────────────────────────────*) ЗАДАЧА Работа; ПЕР msg:MSG; startupInfo:STARTUPINFO; УКАЗ hInstance:=GetModuleHandle(0); GetStartupInfo(startupInfo); CmdShow:=startupInfo.wShowWindow; ЕСЛИ НЕ ПрописатьОкно() ТО MessageBox(0,"отказ в ПрописатьОкно","",MB_OK); ВОЗВРАТ КОН; ЕСЛИ СоздатьОкно() = 0 ТО MessageBox(0,"отказ в СоздатьОкно","",MB_OK); ВОЗВРАТ КОН; (* получение и обработка сообщений *) ПОКА GetMessage(msg,0,0,0) ВЫП TranslateMessage(msg); DispatchMessage(msg) КОН КОН Работа; (*────────────────────────────────────────────────────────────────────────────*) УКАЗ Работа КОН Окно. ▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
|
|